package matse11.LSpielProject;




import android.app.Activity;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;



public class Spiel extends Activity{
	private Spieler sp1;
	private Spieler sp2;
	private static short[][] feld;
	private static short[][] akFeld;
	private static int zug = 0;
	private HighScore highscore = null;
	
	//TODO: highscore verbinden
	//TODO: Highscore ausgabe
	//TODO: zurueck button spielview
	//TODO: spielview runde, namen der spieler in richtiger farbe.
	//TODO: spielernamen eingeben...
	//nach 9 uhr
	//TODO: Computer hinzufuegen 
	//TODO: uebereinnander liegende steine rot zeichnen
	//TODO: fehler nur anzeigen wenn n stein wirklich bewegt wurde
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		starteMenu();
		//sp1 = new Spieler("Spieler1");
		//sp2 = new Spieler("Spieler2");
		Logik.logik();
		short[][] zwfeld = { {-1, 0, 0, 0 }, 
				  { 1, 2, 2, 2 }, 
				  {1,1,1,2}, 
				  {0,0,0,-1} };
		feld = zwfeld;
		akFeld  = new short[4][4];
		
		
		highscore = new HighScore(this.getApplicationContext());
		zug++;
		setzeEinenLStein();
		
		
	}
	
	
	public void starteMenu(){
		setContentView((R.layout.menuview));
		System.out.println("Test");
		Button newGame = (Button) findViewById(R.id.newgamebtn);
		newGame.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				//starteSpielView();
				starteNamenseingabe();
			}
		});
		((Button) findViewById(R.id.anleitungbtn)).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				starteAnleitung();
			}
		});
		((Button) findViewById(R.id.infobtn)).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				starteInfo();
			}
		});
		((Button) findViewById(R.id.highscorebtn)).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				starteHighscore();
			}
		});
	}
	public void starteSpielView(){
		zug = 1;
		short[][] zwfeld = { {-1, 0, 0, 0 }, 
				  { 1, 2, 2, 2 }, 
				  {1,1,1,2}, 
				  {0,0,0,-1} };
		feld = zwfeld;
		akFeld  = new short[4][4];
		setzeEinenLStein();
		sp1.setLStein(true);
		sp2.setLStein(true);
		
		setContentView(new SpielView(this, this));

	}
	public void starteAnleitung() {
		setContentView(R.layout.anleitung);
		((Button) findViewById(R.id.backButton)).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				starteMenu();
			}
		});
	}
	public void starteInfo(){
		setContentView(R.layout.infolayout);
		((Button) findViewById(R.id.backbtn)).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				starteMenu();
			}
		});
	}
	
	public void starteNamenseingabe() {
		setContentView(R.layout.nameneingabe);
		
		((Button) findViewById(R.id.startgamebtn)).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				String zw = ((EditText) findViewById(R.id.editText1)).getText().toString();
				if(zw.equals("")){
					zw = "Spieler 1";
				}
				sp1 = new Spieler(zw);
				long id = ((Spinner) findViewById(R.id.spinner1)).getSelectedItemId();
				if(id == 1){
					//computer 
					sp2 = new Computer();
					System.out.println("sp2 = computer");
				}else{
					zw = ((EditText) findViewById(R.id.editText2)).getText().toString();
					if(zw.equals("")){
						zw = "Spieler 2";
					}
					sp2 = new Spieler(zw);
				}
				starteSpielView();
			}
		});
	}
	
	public void starteHighscore() {
		setContentView(R.layout.highscorelayout);
		((Button) findViewById(R.id.highbackbtn)).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				starteMenu();
			}
		});
		//fuelle den Highscore
		TextView spieler = ((TextView) findViewById(R.id.textView2));
		TextView zuege = ((TextView) findViewById(R.id.textView3));
		
		spieler.setText("Spieler: \n"+highscore.spielerToString());
		zuege.setText("Zuege: \n"+highscore.zuegeToString());
	}
	
	public void setzeEinenLStein(){
		int spieler = zug%2;
		if(spieler == 0){
			spieler = 2;
		}
		for(int i=0; i<4; i++){
			for(int j=0; j<4; j++){
				akFeld[i][j] = 0;
				if(feld[i][j] == spieler){
					akFeld[i][j] = feld[i][j];
				}
			}
		}
	}
	
	public boolean setzeNStein(int zeile, int spalte){
		if(feld[zeile][spalte] == -1){
			for(int i=0; i<4; i++){
				for(int j=0; j<4; j++){
					akFeld[i][j] = 0;
					}
				}
			akFeld[zeile][spalte] = -1;
			feld[zeile][spalte] = 0;
			return true;
			}
		else{
			return false;
		}
	}
	public void erstelleNeuesFeld(){
		int spieler = zug%2;
		if(spieler == 0){
			spieler = 2;
		}
		
		for(int i=0; i<4; i++){
			for(int j=0; j<4; j++){
				if(feld[i][j] == spieler && this.getAkSpieler().getLStein()){
					feld[i][j] = 0;
				}
				if(akFeld[i][j]!=0){
					feld[i][j]=akFeld[i][j];
					akFeld[i][j] = 0;
				}
			}
		}
		
	}
	
	public static short getZug(){
		return (short) zug;
	}
	public static short[][] getFeld(){
		return feld;
	}
	public static short[][] getAkFeld(){
		return akFeld;
	}
	
	public Spieler getAkSpieler(){
		if (zug%2 == 1) {
			return sp1;
		}else{
			return sp2;
		}
	}
	
	public void naechsterSpieler(){
		sp1.setLStein(true);
		sp2.setLStein(true);
		
		++zug;
		System.out.println("Zug: "+zug);
		if(zug % 2 == 0 && sp2.IsComputer()){
			System.out.println("Der Computer sollte jetzt ziehen");
			short[][] tmp = ((Computer) sp2).spielzug(feld);
			for (int i = 0; i < tmp.length; i++) {
				for (int j = 0; j < tmp.length; j++) {
					feld[i][j] = tmp[i][j];
				}
			}
			pruefeGewinn();
			naechsterSpieler();
		}else{
			setzeEinenLStein();
		}
		//computer startet
		
	}
	public void pruefeGewinn(){
		
		short[][] zwFeld = new short[4][4];
		for (int i = 0; i < zwFeld.length; i++) {
			for (int j = 0; j < zwFeld.length; j++) {
				zwFeld[i][j] = feld[i][j];
			}
		}
		
		if(Operator.pruefe(zwFeld, Logik.getGewinnsituationen())){
			String name;
			if(zug%2 == 1){
				name = sp1.getName();
				highscore.vergleiche(name, zug/2);
			}else{
				name = sp2.getName();
				if(!sp2.IsComputer()){
					highscore.vergleiche(name, zug/2);
				}else{
					highscore.vergleiche(sp1.getName(), zug/2);
				}
			}
			System.out.println("HighScore!!");
			
			
			
			
			System.out.println("GEWONNEN!");
			/*setContentView(R.layout.spielergewonnen);
			TextView msg = (TextView) findViewById(R.id.message);
			msg.setText(name+" hat gewonnen!");
			((Button) findViewById(R.id.tomenubtn)).setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View v) {
					starteMenu();
				}
			});*/
			setContentView(new SpielGewonnenView(this, this, name));
		}
	}

	
}